{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "1a98ac73",
   "metadata": {},
   "source": [
    "# Optional Lab: Linear Regression using Scikit-Learn"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d55cb275",
   "metadata": {},
   "source": [
    "There is an open-source, commercially usable machine learning toolkit called [scikit-learn](https://scikit-learn.org/stable/index.html). This toolkit contains implementations of many of the algorithms that you will work with in this course.\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d177f303",
   "metadata": {},
   "source": [
    "## Goals\n",
    "In this lab you will:\n",
    "- Utilize  scikit-learn to implement linear regression using Gradient Descent"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "75376598",
   "metadata": {},
   "source": [
    "## Tools\n",
    "You will utilize functions from scikit-learn as well as matplotlib and NumPy. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "6d0d4fd6",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-06-17T05:05:43.631931Z",
     "start_time": "2022-06-17T05:05:42.176304Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "np.set_printoptions(precision=2)\n",
    "from sklearn.linear_model import LinearRegression, SGDRegressor\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from lab_utils_multi import  load_house_data\n",
    "import matplotlib.pyplot as plt\n",
    "dlblue = '#0096ff'; dlorange = '#FF9300'; dldarkred='#C00000'; dlmagenta='#FF40FF'; dlpurple='#7030A0'; \n",
    "plt.style.use('./deeplearning.mplstyle')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5ff304ab",
   "metadata": {},
   "source": [
    "# Gradient Descent\n",
    "Scikit-learn has a gradient descent regression model [sklearn.linear_model.SGDRegressor](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDRegressor.html#examples-using-sklearn-linear-model-sgdregressor).  Like your previous implementation of gradient descent, this model performs best with normalized inputs. [sklearn.preprocessing.StandardScaler](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html#sklearn.preprocessing.StandardScaler) will perform z-score normalization as in a previous lab. Here it is referred to as 'standard score'."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f14094d1",
   "metadata": {},
   "source": [
    "### Load the data set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "f68d0234",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-06-17T05:05:43.646959Z",
     "start_time": "2022-06-17T05:05:43.633934Z"
    }
   },
   "outputs": [],
   "source": [
    "X_train, y_train = load_house_data()\n",
    "X_features = ['size(sqft)','bedrooms','floors','age']"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b9812f08",
   "metadata": {},
   "source": [
    "### Scale/normalize the training data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "eeb7348f",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-06-17T05:05:43.662677Z",
     "start_time": "2022-06-17T05:05:43.649968Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Peak to Peak range by column in Raw        X:[2.41e+03 4.00e+00 1.00e+00 9.50e+01]\n",
      "Peak to Peak range by column in Normalized X:[5.85 6.14 2.06 3.69]\n"
     ]
    }
   ],
   "source": [
    "scaler = StandardScaler()\n",
    "X_norm = scaler.fit_transform(X_train)\n",
    "print(f\"Peak to Peak range by column in Raw        X:{np.ptp(X_train,axis=0)}\")   \n",
    "print(f\"Peak to Peak range by column in Normalized X:{np.ptp(X_norm,axis=0)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9421f4dc",
   "metadata": {},
   "source": [
    "### Create and fit the regression model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "0f7fd1d4",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-06-17T05:05:43.678678Z",
     "start_time": "2022-06-17T05:05:43.666676Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SGDRegressor()\n",
      "number of iterations completed: 122, number of weight updates: 12079.0\n"
     ]
    }
   ],
   "source": [
    "sgdr = SGDRegressor(max_iter=1000)\n",
    "sgdr.fit(X_norm, y_train)\n",
    "print(sgdr)\n",
    "print(f\"number of iterations completed: {sgdr.n_iter_}, number of weight updates: {sgdr.t_}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9a48fa4d",
   "metadata": {},
   "source": [
    "### View parameters\n",
    "Note, the parameters are associated with the *normalized* input data. The fit parameters are very close to those found in the previous lab with this data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "932d5de3",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-06-17T05:05:43.694162Z",
     "start_time": "2022-06-17T05:05:43.681680Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "model parameters:                   w: [110.13 -21.06 -32.48 -38.05], b:[363.16]\n",
      "model parameters from previous lab: w: [110.56 -21.27 -32.71 -37.97], b: 363.16\n"
     ]
    }
   ],
   "source": [
    "b_norm = sgdr.intercept_\n",
    "w_norm = sgdr.coef_\n",
    "print(f\"model parameters:                   w: {w_norm}, b:{b_norm}\")\n",
    "print(f\"model parameters from previous lab: w: [110.56 -21.27 -32.71 -37.97], b: 363.16\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ddd6f9c3",
   "metadata": {},
   "source": [
    "### Make predictions\n",
    "Predict the targets of the training data. Use both the `predict` routine and compute using $w$ and $b$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "4d78fd0e",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-06-17T05:05:43.710146Z",
     "start_time": "2022-06-17T05:05:43.697144Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "prediction using np.dot() and sgdr.predict match: True\n",
      "Prediction on training set:\n",
      "[295.19 485.88 389.58 492.04]\n",
      "Target values \n",
      "[300.  509.8 394.  540. ]\n"
     ]
    }
   ],
   "source": [
    "# make a prediction using sgdr.predict()\n",
    "y_pred_sgd = sgdr.predict(X_norm)\n",
    "# make a prediction using w,b. \n",
    "y_pred = np.dot(X_norm, w_norm) + b_norm  \n",
    "print(f\"prediction using np.dot() and sgdr.predict match: {(y_pred == y_pred_sgd).all()}\")\n",
    "\n",
    "print(f\"Prediction on training set:\\n{y_pred[:4]}\" )\n",
    "print(f\"Target values \\n{y_train[:4]}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ca4bbb9e",
   "metadata": {},
   "source": [
    "### Plot Results\n",
    "Let's plot the predictions versus the target values."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "79279eaa",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-06-17T05:05:44.039303Z",
     "start_time": "2022-06-17T05:05:43.712146Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x216 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot predictions and targets vs original features    \n",
    "fig,ax=plt.subplots(1,4,figsize=(12,3),sharey=True)\n",
    "for i in range(len(ax)):\n",
    "    ax[i].scatter(X_train[:,i],y_train, label = 'target')\n",
    "    ax[i].set_xlabel(X_features[i])\n",
    "    ax[i].scatter(X_train[:,i],y_pred,color=dlorange, label = 'predict')\n",
    "ax[0].set_ylabel(\"Price\"); ax[0].legend();\n",
    "fig.suptitle(\"target versus prediction using z-score normalized model\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cedec509",
   "metadata": {},
   "source": [
    "## Congratulations!\n",
    "In this lab you:\n",
    "- utilized an open-source machine learning toolkit, scikit-learn\n",
    "- implemented linear regression using gradient descent and feature normalization from that toolkit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "88452755",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
